import { DomPosition } from "../@types/index"

/**
 * 获取dom
 * @param name dom元素名称
 */
export const getDom = (name:string | object | null) => {
    if (!name) return null
    // @ts-ignore
    if(Object.prototype.toString.call(name).match(/\[object (.*?)\]/)[1].toLowerCase() !== 'string') return name // 传入一个dom元素
    // @ts-ignore
    if(/^#\w/.test(<String>name)) return document.getElementById(<String>name?.replace(/^#/,'')) // 精确id获取
    // @ts-ignore
    if(/^\.\w/.test(<String>name)) return document.getElementsByClassName(<String>name?.replace(/^\./,'')) // class获取 是一个数组建议不要使用
    return null
}

/**
 *  dom位置边界
 * @param element
 * @param isRelative
 */
export const getDomPosition = (element:string | HTMLElement | null,isRelative:boolean = true):DomPosition | null => {
    // @ts-ignore
    const dom = getDom(element)
    if(!dom) return null
    // @ts-ignore
    const { x,y,width,height } = dom?.getBoundingClientRect() || { x:0,y:0 ,width:0,height: 0} // dom
    return {
        // @ts-ignore
        top: isRelative ? dom?.offsetTop?? 0 : y,
        // @ts-ignore
        left:isRelative ? dom?.offsetLeft?? 0 : x,
        // @ts-ignore
        bottom: isRelative ? dom?.offsetTop?? 0 : y  + height,
        // @ts-ignore
        right: isRelative ? dom?.offsetLeft?? 0 : x + width,
        width,
        height
    }
}
